/* * Created by JFormDesigner on Tue Apr 28 15:59:43 CEST 2015 */ package op.settings.subpanels; import com.jgoodies.forms.factories.CC; import com.jgoodies.forms.layout.FormLayout; import entity.prescription.MedStock; import entity.system.SYSPropsTools; import gui.interfaces.DefaultPanel; import op.OPDE; import op.system.LogicalPrinter; import op.system.PrinterForm; import op.tools.PrintListElement; import op.tools.SYSTools; import javax.persistence.EntityManager; import javax.persistence.Query; import javax.print.PrintService; import javax.print.PrintServiceLookup; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.math.BigInteger; /** * @author Torsten Löhr */ public class PnlLabelPrinterSetup extends DefaultPanel { private MedStock testStock; public PnlLabelPrinterSetup() { super("opde.settings.labelPrinters"); initComponents(); initPanel(); } private void initPanel() { testStock = null; cmbPhysicalPrinters.setModel(new DefaultComboBoxModel()); cmbForm.setModel(new DefaultComboBoxModel()); cmbLogicalPrinters.setModel(new DefaultComboBoxModel()); //todo: seit macos sierra funktioniert das so gut wie nicht mehr. PrintService[] prservices = PrintServiceLookup.lookupPrintServices(null, null); // this prevents exceptions when there are no printers installed on the OS yet if (prservices != null && prservices.length == 0) { prservices = null; } if (prservices != null) { cmbPhysicalPrinters.setModel(new DefaultComboBoxModel(prservices)); cmbPhysicalPrinters.setRenderer((jList, o, i, isSelected, cellHasFocus) -> { if (o == null) return new DefaultListCellRenderer().getListCellRendererComponent(jList, SYSTools.xx("misc.msg.error"), i, isSelected, cellHasFocus); return new DefaultListCellRenderer().getListCellRendererComponent(jList, ((PrintService) o).getName(), i, isSelected, cellHasFocus); }); cmbLogicalPrinters.setRenderer((jList, o, i, isSelected, cellHasFocus) -> { if (o == null) return new DefaultListCellRenderer().getListCellRendererComponent(jList, SYSTools.xx("misc.msg.error"), i, isSelected, cellHasFocus); return new DefaultListCellRenderer().getListCellRendererComponent(jList, ((LogicalPrinter) o).getLabel(), i, isSelected, cellHasFocus); }); cmbForm.setRenderer((jList, o, i, isSelected, cellHasFocus) -> { if (o == null) return new DefaultListCellRenderer().getListCellRendererComponent(jList, SYSTools.xx("misc.msg.error"), i, isSelected, cellHasFocus); return new DefaultListCellRenderer().getListCellRendererComponent(jList, ((PrinterForm) o).getLabel(), i, isSelected, cellHasFocus); }); cmbPhysicalPrinters.addItemListener(e -> { if (e.getStateChange() == ItemEvent.SELECTED) { PrintService printService = (PrintService) cmbPhysicalPrinters.getSelectedItem(); OPDE.getProps().setProperty(SYSPropsTools.KEY_PHYSICAL_PRINTER, printService.getName()); OPDE.getLocalProps().setProperty(SYSPropsTools.KEY_PHYSICAL_PRINTER, printService.getName()); OPDE.saveLocalProps(); } }); cmbLogicalPrinters.addItemListener(e -> { if (e.getStateChange() == ItemEvent.SELECTED) { LogicalPrinter logicalPrinter = (LogicalPrinter) cmbLogicalPrinters.getSelectedItem(); cmbForm.setModel(new DefaultComboBoxModel(logicalPrinter.getForms().values().toArray())); if (OPDE.getProps().containsKey(SYSPropsTools.KEY_MEDSTOCK_LABEL) && logicalPrinter.getForms().containsKey(OPDE.getProps().getProperty(SYSPropsTools.KEY_MEDSTOCK_LABEL))) { cmbForm.setSelectedItem(logicalPrinter.getForms().get(OPDE.getProps().getProperty(SYSPropsTools.KEY_MEDSTOCK_LABEL))); } OPDE.getLocalProps().setProperty(SYSPropsTools.KEY_LOGICAL_PRINTER, logicalPrinter.getName()); OPDE.getProps().setProperty(SYSPropsTools.KEY_LOGICAL_PRINTER, logicalPrinter.getName()); OPDE.getLocalProps().setProperty(SYSPropsTools.KEY_MEDSTOCK_LABEL, ((PrinterForm) cmbForm.getSelectedItem()).getName()); OPDE.getProps().setProperty(SYSPropsTools.KEY_MEDSTOCK_LABEL, ((PrinterForm) cmbForm.getSelectedItem()).getName()); } }); cmbForm.addItemListener(e -> { if (e.getStateChange() == ItemEvent.SELECTED) { OPDE.getProps().setProperty(SYSPropsTools.KEY_MEDSTOCK_LABEL, ((PrinterForm) cmbForm.getSelectedItem()).getName()); OPDE.getLocalProps().setProperty(SYSPropsTools.KEY_MEDSTOCK_LABEL, ((PrinterForm) cmbForm.getSelectedItem()).getName()); } }); if (OPDE.getPrintProcessor().isWorking()) { cmbLogicalPrinters.setModel(new DefaultComboBoxModel(OPDE.getLogicalPrinters().getLogicalPrintersList().toArray())); LogicalPrinter logicalPrinter = OPDE.getLogicalPrinters().getMapName2LogicalPrinter().get(OPDE.getProps().getProperty(SYSPropsTools.KEY_LOGICAL_PRINTER)); cmbLogicalPrinters.setSelectedItem(logicalPrinter); cmbForm.setModel(new DefaultComboBoxModel(logicalPrinter.getForms().values().toArray())); cmbForm.setSelectedItem(logicalPrinter.getForms().get(OPDE.getProps().getProperty(SYSPropsTools.KEY_MEDSTOCK_LABEL))); } if (OPDE.getProps().containsKey(SYSPropsTools.KEY_PHYSICAL_PRINTER) && OPDE.getLogicalPrinters().getPrintService(OPDE.getProps().getProperty(SYSPropsTools.KEY_PHYSICAL_PRINTER)) != null) { cmbPhysicalPrinters.setSelectedItem(OPDE.getLogicalPrinters().getPrintService(OPDE.getProps().getProperty(SYSPropsTools.KEY_PHYSICAL_PRINTER))); } else { PrintService printService = (PrintService) cmbPhysicalPrinters.getSelectedItem(); OPDE.getProps().setProperty(SYSPropsTools.KEY_PHYSICAL_PRINTER, printService.getName()); OPDE.getLocalProps().setProperty(SYSPropsTools.KEY_PHYSICAL_PRINTER, printService.getName()); } if (!OPDE.getLogicalPrinters().getLogicalPrintersList().isEmpty()) { cmbLogicalPrinters.setModel(new DefaultComboBoxModel(OPDE.getLogicalPrinters().getLogicalPrintersList().toArray())); LogicalPrinter logicalPrinter = OPDE.getLogicalPrinters().getMapName2LogicalPrinter().get(OPDE.getProps().getProperty(SYSPropsTools.KEY_LOGICAL_PRINTER)); if (logicalPrinter == null) logicalPrinter = OPDE.getLogicalPrinters().getLogicalPrintersList().get(0); if (!OPDE.getProps().containsKey(SYSPropsTools.KEY_LOGICAL_PRINTER)) { OPDE.getLocalProps().setProperty(SYSPropsTools.KEY_LOGICAL_PRINTER, logicalPrinter.getName()); OPDE.getProps().setProperty(SYSPropsTools.KEY_LOGICAL_PRINTER, logicalPrinter.getName()); } cmbLogicalPrinters.setSelectedItem(logicalPrinter); cmbForm.setModel(new DefaultComboBoxModel(logicalPrinter.getForms().values().toArray())); if (OPDE.getProps().containsKey(SYSPropsTools.KEY_MEDSTOCK_LABEL) && logicalPrinter.getForms().containsKey(OPDE.getProps().getProperty(SYSPropsTools.KEY_MEDSTOCK_LABEL))) { cmbForm.setSelectedItem(logicalPrinter.getForms().get(OPDE.getProps().getProperty(SYSPropsTools.KEY_MEDSTOCK_LABEL))); } else { cmbForm.setSelectedIndex(0); OPDE.getLocalProps().setProperty(SYSPropsTools.KEY_MEDSTOCK_LABEL, ((PrinterForm) cmbForm.getSelectedItem()).getName()); OPDE.getProps().setProperty(SYSPropsTools.KEY_MEDSTOCK_LABEL, ((PrinterForm) cmbForm.getSelectedItem()).getName()); } } } else { cmbPhysicalPrinters.setEnabled(false); cmbLogicalPrinters.setEnabled(false); cmbPhysicalPrinters.setEnabled(false); } btnTestLabel.setEnabled(prservices != null); cmbForm.setEnabled(prservices != null); cmbLogicalPrinters.setEnabled(prservices != null); cmbPhysicalPrinters.setEnabled(prservices != null); } private void btnTestLabelActionPerformed(ActionEvent e) { try { EntityManager em = OPDE.createEM(); Query query = em.createNativeQuery("SELECT BestID FROM medstock ORDER BY RAND() LIMIT 0,1"); if (!query.getResultList().isEmpty()) { testStock = em.find(MedStock.class, ((BigInteger) query.getResultList().get(0)).longValue()); } em.close(); } catch (Exception e1) { testStock = null; } if (testStock == null) return; LogicalPrinter localPrinter = OPDE.getLogicalPrinters().getMapName2LogicalPrinter().get(OPDE.getProps().getProperty(SYSPropsTools.KEY_LOGICAL_PRINTER)); PrinterForm printerForm1 = localPrinter.getForms().get(OPDE.getProps().getProperty(SYSPropsTools.KEY_MEDSTOCK_LABEL)); OPDE.getPrintProcessor().addPrintJob(new PrintListElement(testStock, localPrinter, printerForm1, OPDE.getProps().getProperty(SYSPropsTools.KEY_PHYSICAL_PRINTER))); } private void cmbFormItemStateChanged(ItemEvent e) { PrinterForm form = (PrinterForm) cmbForm.getSelectedItem(); if (form != null) { OPDE.getLocalProps().setProperty(SYSPropsTools.KEY_MEDSTOCK_LABEL, ((PrinterForm) cmbForm.getSelectedItem()).getName()); OPDE.getProps().setProperty(SYSPropsTools.KEY_MEDSTOCK_LABEL, ((PrinterForm) cmbForm.getSelectedItem()).getName()); } OPDE.saveLocalProps(); } private void cmbLogicalPrintersItemStateChanged(ItemEvent e) { LogicalPrinter logicalPrinter = (LogicalPrinter) cmbLogicalPrinters.getSelectedItem(); if (logicalPrinter != null) { OPDE.getLocalProps().setProperty(SYSPropsTools.KEY_LOGICAL_PRINTER, logicalPrinter.getName()); OPDE.getProps().setProperty(SYSPropsTools.KEY_LOGICAL_PRINTER, logicalPrinter.getName()); } OPDE.saveLocalProps(); } private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents btnTestLabel = new JButton(); cmbForm = new JComboBox(); cmbLogicalPrinters = new JComboBox(); cmbPhysicalPrinters = new JComboBox(); //======== this ======== setLayout(new FormLayout( "default:grow", "3*(default, $lgap), default")); //---- btnTestLabel ---- btnTestLabel.setText("Test"); btnTestLabel.setEnabled(false); btnTestLabel.addActionListener(e -> btnTestLabelActionPerformed(e)); add(btnTestLabel, CC.xy(1, 7, CC.RIGHT, CC.DEFAULT)); //---- cmbForm ---- cmbForm.addItemListener(e -> cmbFormItemStateChanged(e)); add(cmbForm, CC.xy(1, 5)); //---- cmbLogicalPrinters ---- cmbLogicalPrinters.addItemListener(e -> cmbLogicalPrintersItemStateChanged(e)); add(cmbLogicalPrinters, CC.xy(1, 3)); add(cmbPhysicalPrinters, CC.xy(1, 1)); // JFormDesigner - End of component initialization //GEN-END:initComponents } // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables private JButton btnTestLabel; private JComboBox cmbForm; private JComboBox cmbLogicalPrinters; private JComboBox cmbPhysicalPrinters; // JFormDesigner - End of variables declaration //GEN-END:variables }